package com.health.ts.utils;
import org.springframework.util.Base64Utils;

import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.DES;

/**  
* @ClassName: DesEncryptUtil  
* @Description: 加解密工具类   
*/  
public class DesEncryptUtil{
	
    private final static String ENCODE = "UTF-8";
    private final static String DEFAULT_SALT = "QWE123ASD";//默认密钥
    
    /**  
    * @Title: encrypt  
    * @Description: 动态密盐进行加密  
    * @param @param data
    * @param @param key
    * @param @return
    * @param @throws Exception    参数  
    * @return String    返回类型  
    * @throws  
    */ 
    public static String encrypt(String data, String key) throws Exception {
        byte[] bt = desEncrypt(data.getBytes(ENCODE), key.getBytes(ENCODE));
        return Base64Utils.encodeToString(bt);
    }
    
    /**  
    * @Title: encrypt  
    * @Description: 使用默认密盐进行加密  
    * @param @param data
    * @param @return
    * @param @throws Exception    参数  
    * @return String    返回类型  
    * @throws  
    */ 
    public static String encrypt(String data) throws Exception {
        return encrypt(data, DEFAULT_SALT);
    }
    

    /**  
    * @Title: decrypt  
    * @Description: 动态密盐进行解密  
    * @param @param data
    * @param @param key
    * @param @return
    * @param @throws Exception
    * @return String    返回类型  
    * @throws  
    */ 
    public static String decrypt(String data, String key) throws Exception {
        if (data == null)
            return null;
        byte[] buf = Base64Utils.decodeFromString(data);
        byte[] bt = desDecrypt(buf, key.getBytes(ENCODE));
        return new String(bt, ENCODE);
    }
    
    /**  
    * @Title: decrypt  
    * @Description: 使用默认密盐进行解密
    * @param @param data
    * @param @return
    * @param @throws Exception    参数  
    * @return String    返回类型  
    * @throws  
    */ 
    public static String decrypt(String data) throws Exception {
		return decrypt(data, DEFAULT_SALT);
    }
    
    /**  
    * @Title: encrypt  
    * @Description: 动态密盐进行DES加密   
    * @param @param data
    * @param @param key 加密键byte数组
    * @param @return
    * @param @throws Exception
    * @return byte[]    返回类型  
    * @throws  
    */ 
    private static byte[] desEncrypt(byte[] data, byte[] key) throws Exception {
    	DES des = SecureUtil.des(key);
    	return des.encrypt(data);
    }
    /**  
    * @Title: decrypt  
    * @Description: 动态密盐进行DES解密 
    * @param @param data
    * @param @param key 解密键byte数组
    * @param @return
    * @param @throws Exception 
    * @return byte[]    返回类型  
    * @throws  
    */ 
    private static byte[] desDecrypt(byte[] data, byte[] key) throws Exception {
    	DES des = SecureUtil.des(key);
    	return des.decrypt(data);
    }
}
